home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 3: The Continuation / 17-Bit_The_Continuation_Disc.iso / amigan / amigan 5 / megboard / clock.c next >
C/C++ Source or Header  |  1994-01-27  |  4KB  |  162 lines

  1.  
  2. static int adr[6]={9,8,7,4,2,0};
  3. static char *month[12]={
  4.        "Jan",
  5.        "Feb",
  6.        "Mar",
  7.        "Apr",
  8.        "May",
  9.        "Jun",
  10.        "Jul",
  11.        "Aug",
  12.        "Sep",
  13.        "Oct",
  14.        "Nov",
  15.        "Dec"};
  16.  
  17. static unsigned char d,i,*adradr=(char *)0x600003,*dataadr=(char *)0x600001;
  18.  
  19. readclock(data)
  20. char data[];
  21. {
  22.     *adradr=0xc;/* check for end of update cycle */
  23.     d=*dataadr;
  24.     do {
  25.         *adradr=0xc;
  26.     } while((*dataadr&0x10)==0);
  27.     /* here if just completed update cycle */
  28.     do {
  29.         for(i=0;i<6;i++) {
  30.            *adradr=adr[i];
  31.            data[i]=*dataadr;
  32.         }
  33.         *adradr=0xa;
  34.         if((*dataadr&0x80)!=0) continue;/* update */
  35.         *adradr=0xc;
  36.     } while((*dataadr&0x10)!=0);
  37.     /* here if read without encountering another update */
  38. }
  39.  
  40. writeclock(data)
  41. char data[];
  42. {
  43.     *adradr=0xc;/* check for end of update cycle */
  44.     d=*dataadr;
  45.     do {
  46.         *adradr=0xc;
  47.     } while((*dataadr&0x10)==0);
  48.     /* here if just completed update cycle */
  49.     do {
  50.         for(i=0;i<6;i++) {
  51.            *adradr=adr[i];
  52.            *dataadr=data[i];
  53.         }
  54.         *adradr=0xa;
  55.         if((*dataadr&0x80)!=0) continue;/* update */
  56.         *adradr=0xc;
  57.     } while((*dataadr&0x10)!=0);
  58.     /* here if written without encountering another update */
  59. }
  60.  
  61. main(argc,argv)
  62. int argc;
  63. char *argv[];
  64. {
  65.     int i;
  66.     char data[6];
  67.     char string[40];
  68.     int day,year,hour,min,sec;
  69.     /* check validity of clock */
  70.     *adradr=0xa;
  71.     if((i=(*dataadr&0x7f))!=0x20)
  72.     {
  73.         printf("reg a is %d\n",i);
  74.         *adradr=0xa;
  75.         *dataadr=0x20;
  76.         *adradr=0xd;
  77.         *dataadr=0;
  78.     }
  79.     *adradr=0xb;
  80.     if((i=*dataadr)!=0x7)
  81.     {
  82.         printf("reg b is %d\n",i);
  83.         *adradr=0xb;
  84.         *dataadr=0x7;
  85.         *adradr=0xd;
  86.         *dataadr=0;
  87.     }
  88.     *adradr=0xd;
  89.     if(((i=*dataadr) != 0x80) && (argc < 3))
  90.     {
  91.         printf("reg d is %d\n",i);
  92.         printf("CLOCK CHIP INVALID\n");
  93.         printf("To validate clock chip execute:\n");
  94.         printf("  clock dd-mmm-yy hh:mm:ss\n");
  95.         exit(30);
  96.     }
  97.     *adradr=0xd;
  98.     *dataadr=0x80; /* set clock ok bit */
  99.     readclock(data);
  100.     while((argc--)>1){
  101.        if(strlen(argv[argc])==9&&argv[argc][2]=='-'&&argv[argc][6]=='-')
  102.        {  /* handle date */
  103.           sscanf(argv[argc],"%2d-%3s-%2d",&day,string,&year);
  104.           if(day>0&&day<32) data[2]=day;
  105.           else {
  106.               printf("bad day of month\n");
  107.               exit(30);
  108.           }
  109.           for(i=0;i<12;i++) {
  110.               for(d=0;d<3;d++) {
  111.                  if(tolower(string[d])!=tolower(month[i][d])) break;
  112.                  else if(d==2) data[1]=i+1;
  113.               }
  114.               if(d==3) break;
  115.           }
  116.           if(i==12){
  117.               printf("bad month\n");
  118.               exit(30);
  119.           }
  120.           data[0]=year;
  121.        }
  122.        else if(strlen(argv[argc])>4&&argv[argc][2]==':') /* time */
  123.        {  /* handle time */
  124.           if(strlen(argv[argc])==8&&argv[argc][5]==':')
  125.              sscanf(argv[argc],"%2d:%2d:%2d",&hour,&min,&sec);
  126.           else {
  127.              sscanf(argv[argc],"%2d:%2d",&hour,&min);
  128.              sec=0;
  129.           }
  130.           if(hour>=0&&hour<24) data[3]=hour;
  131.           else {
  132.               printf("bad hour\n");
  133.               exit(30);
  134.           }
  135.           if(min>=0 && min<60) data[4]=min;
  136.           else {
  137.               printf("bad minute\n");
  138.               exit(30);
  139.           }
  140.           if(sec>=0 && sec<60) data[5]=sec;
  141.           else {
  142.               printf("bad second\n");
  143.               exit(30);
  144.           }
  145.        }
  146.        else /* syntax error */
  147.        {
  148.            printf("Incorrect arguements\n");
  149.            exit(30);
  150.        }
  151.        writeclock(data);
  152.     }
  153.  
  154.     sprintf(string,"date %2d-%3s-%2d %2d:%2d:%2d\n",data[2],month[data[1]-1],
  155.        data[0],data[3],data[4],data[5]);
  156.     for(i=0;string[i];i++) {
  157.        if(string[i]==' ' && i!=4 && i!=14) string[i]='0';
  158.     }
  159.     if((!Execute(string,0,0))||(!Execute("date\n",0,0)))
  160.        printf("\nDATE INVALID\n");
  161. }
  162.